package com.example.lettcode._202412._20241219;

/*
557. 反转字符串中的单词 III
给定一个字符串 s ，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。

示例 1：
输入：s = "Let's take LeetCode contest"
输出："s'teL ekat edoCteeL tsetnoc"

示例 2:
输入： s = "Mr Ding"
输出："rM gniD"

提示：
1 <= s.length <= 5 * 104
s 包含可打印的 ASCII 字符。
s 不包含任何开头或结尾空格。
s 里 至少 有一个词。
s 中的所有单词都用一个空格隔开。
 */
public class _557_fan_zhuan_zi_fu_chuan_zhong_de_dan_ci {

    public static void main(String[] args) {
        String s = "Let's take LeetCode contest";
        System.out.println(reverseWords(s));
    }

    public static String reverseWords(String s) {
        int left = 0, right = 1;
        char[] chars = s.toCharArray();
        while (right < chars.length) {
            if (chars[right] != ' ') {
                right++;
            } else {
                reverse(chars, left, right-1);
                left = ++right;
                right++;
            }
        }
        reverse(chars, left, right-1);
        return new String(chars);
    }

    public static void reverse(char[] chars, int left, int right) {
        while (left < right) {
            char temp = chars[left];
            chars[left] = chars[right];
            chars[right] = temp;
            left++;
            right--;
        }
    }
}
